package com.enjoy.redis.lua;

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.Arrays;
import java.util.Collections;

public class LuaTest {

    /**
     * 通过lua脚本实现限流功能
     * <p>
     * 第一次使用incr对KEY（某个IP作为KEY）加一，如果是第一次访问，
     * 使用expire设置一个超时时间60秒，这个超时时间作为Value第一个参数传入，
     * 如果现在递增的数目大于输入的第二个Value参数，返回失败标记，否则成功。
     * redis的超时时间到了，这个Key消失，又可以访问
     */
    public final static String LUA_SCRIPTS = "local num = redis.call('incr', KEYS[1])\n" + "if tonumber(num) == 1 then\n" + "\tredis.call('expire', KEYS[1], ARGV[1])\n" + "\treturn 1\n" + "elseif tonumber(num) > tonumber(ARGV[2]) then\n" + "\treturn 0\n" + "else \n" + "\treturn 1\n" + "end";

    @Test
    public void test() {
        Jedis jedis = new Jedis("192.168.126.128", 6379);
        String sha = jedis.scriptLoad(LUA_SCRIPTS);
        System.out.println("sha = " + sha);

        Object result = jedis.evalsha(sha, Collections.singletonList("hello"), Arrays.asList("60", "3"));

        System.out.println("result = " + result);

    }
}
